package com.xinggq.user.service.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * 权限实体类
 *
 * @author system
 * @since 2025/1/10
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sys_permission")
public class SysPermissionEntity {

    /**
     * 权限ID，使用分布式ID生成器
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 租户ID
     */
    private Long tenantId;

    /**
     * 权限名称
     */
    private String permissionName;

    /**
     * 权限编码
     */
    private String permissionCode;

    /**
     * 资源类型：menu-菜单，button-按钮，api-接口，data-数据
     */
    private String resourceType;

    /**
     * 资源路径
     */
    private String resourcePath;

    /**
     * 操作：read-读取，write-写入，delete-删除，execute-执行
     */
    private String action;

    /**
     * 父权限ID，0表示顶级权限
     */
    private Long parentId;

    /**
     * 权限层级
     */
    private Integer permissionLevel;

    /**
     * 图标
     */
    private String icon;

    /**
     * 排序
     */
    private Integer sortOrder;

    /**
     * 是否系统权限：0-否，1-是
     */
    private Integer isSystem;

    /**
     * 状态：1-正常，0-禁用，-1-删除
     */
    private Integer status;

    /**
     * 创建人ID
     */
    private Long createdBy;

    /**
     * 创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 更新人ID
     */
    private Long updatedBy;

    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;

    /**
     * 设置创建信息
     */
    public void setCreateInfo(Long userId) {
        LocalDateTime now = LocalDateTime.now();
        this.createdAt = now;
        this.updatedAt = now;
        this.createdBy = userId;
        this.updatedBy = userId;
        if (this.status == null) {
            this.status = 1; // 默认正常状态
        }
    }

    /**
     * 设置更新信息
     */
    public void setUpdateInfo(Long userId) {
        this.updatedAt = LocalDateTime.now();
        this.updatedBy = userId;
    }

    /**
     * 检查权限是否有效
     */
    public boolean isValid() {
        return this.status != null && this.status == 1;
    }

    /**
     * 检查权限是否已删除
     */
    public boolean isDeleted() {
        return this.status != null && this.status == -1;
    }
}